hw1_sound.py로 제출![]()
이 값들을 sample이라고 부르고 압력의 증가나 감소를 측정한다.
소리 sample은 음이나 양의 정수로 이루어져 있다. 이는 기준압력에 대한 상대적인 압력을 측정한다.
ftt module을 사용할 수 있다.import numpy as np
import matplotlib.pyplot as plt
from scipy.io.wavfile import read, write
from IPython.display import Audio
scipy.io.wavfile은 wav 파일의 입출력에 사용한다.scipy.io.wavfile.read(sound.wav) 으로 wav 파일을 읽으면 (sampling rate, samples)인 tuple로 변환한다.(44100,
array([[-2419712, 15728128],
[ 2419712, 26011648],
[14518272, 44764416],
...,
[ 256, -13568],
[ 512, -7424],
[ 512, -2816]]))
IPython.display.Audio에 array 형태의 2-chennel 자료를 입력할 때에는 Shape=(NCHAN, NSAMPLES)로 변환하여 사용한다.woosh.wav 파일을 내려받아 사용하였다.import requests
url = "https://raw.githubusercontent.com/k5yi/econ2005/master/datasets/kid_laugh.wav"
laugh = requests.get(url).content
with open('kid_laugh.wav', 'wb') as f:
f.write(laugh)
fs, data = read('kid_laugh.wav')
예제: sample rate
위 파일의 sample rate은 44,100이므로 이를 주어진 비율로 줄이는 함수를 만들어 보자.
down_sampling(fs, sound, by=0.25)
함수 code만 hw1.py에 포함시켜 과제로 제출한다.
def down_sampling(sample, fs=44100, by=0.25):
step = int(1/by)
return int(fs*by), data[::step, :]
파일 크기를 90% 줄이면 음질에 상당한 영향을 미친다.
rate, downsample = down_sampling(sample, by=0.1)
Audio(downsample.T, rate=rate)
fs, rev_sound = reverse_play(data)
Audio(rev_sound.T, rate=fs)
fs, amplified = amplify(sample level=6)
Audio(amplified.T, rate=fs)
echo = echo_effect(sample fs=44100, delay=0.5, repeat=2, effect=.2)
Audio(echo.T, rate=fs)
fs, mix = mixing([sample, woosh], weight=(.4, .6))
Audio(mix.T, rate=fs)
import requests
url = "https://raw.githubusercontent.com/k5yi/econ2005/master/datasets/woosh.wav"
woosh = requests.get(url).content
with open('woosh.wav', 'wb') as f:
f.write(woosh)
Audio('woosh.wav')
Sample과 woosh mix
참고: Dynamic range compression

